package com.funsport.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.funsport.entity.Venue;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 场地 Service接口
 */
public interface IVenueService extends IService<Venue> {

    /**
     * 创建场地
     *
     * @param venue 场地信息
     * @param managerId 场地管理员ID
     * @return 是否成功
     */
    boolean createVenue(Venue venue, Long managerId);

    /**
     * 检查场地时间段是否可用
     *
     * @param venueId 场地ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 是否可用
     */
    boolean isVenueAvailable(Long venueId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 预订场地
     *
     * @param venueId 场地ID
     * @param eventId 活动ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param userId 预订用户ID
     * @return 是否成功
     */
    boolean bookVenue(Long venueId, Long eventId, LocalDateTime startTime, LocalDateTime endTime, Long userId);

    /**
     * 取消场地预订
     *
     * @param venueId 场地ID
     * @param eventId 活动ID
     * @return 是否成功
     */
    boolean cancelVenueBooking(Long venueId, Long eventId);

    /**
     * 获取场地的所有预订记录
     *
     * @param venueId 场地ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 预订记录列表
     */
    List<Venue> getVenueBookings(Long venueId, LocalDateTime startDate, LocalDateTime endDate);

    /**
     * 根据城市和运动类型搜索场地
     *
     * @param city 城市
     * @param sportTypeId 运动类型ID
     * @return 场地列表
     */
    List<Venue> searchVenues(String city, Long sportTypeId);

    /**
     * 获取场地管理员管理的场地
     *
     * @param managerId 管理员ID
     * @return 场地列表
     */
    List<Venue> getVenuesByManager(Long managerId);

    /**
     * 更新场地状态
     *
     * @param venueId 场地ID
     * @param status 状态（active/inactive/maintenance）
     * @param managerId 管理员ID
     * @return 是否成功
     */
    boolean updateVenueStatus(Long venueId, String status, Long managerId);
}
